---
id: 物理结构和逻辑结构
title: 物理结构和逻辑结构
---

` 数据结构是算法的基石。数据结构是数据的组织管理和存储格式，其实目的是为了高效的访问和修改数据。` 
 
物理结构(存储结构)是实实在在数据在内存中的存储结构。接下来学的数组和链表，就属于**物理结构**。  
基于物理结构衍生出来的称为**逻辑结构**，像线性结构的栈，队列。非线性结构的树和图。

#### 数组(物理结构)。
  数组的特点是：使用连续的存储地址进行储存数组的一种数组结构。  
  数组所适合的是读操作多、写操作少的场 景，下一节我们要讲解的链表则恰恰相反

#### 链表(物理结构)

链表(linked list)是一种在物理上非连续、非顺序的数据结构，由若干节 点(node)所组成。  
单向链表的每一个节点又包含两部分，一部分是存放数据的变量data，另一部 分是指向下一个节点的指针next。  
链表的第1个节点被称为头节点，最后1个节点被称为尾节点，尾节点的next指 针指向空。  

要想让每个节点都能回溯到它的前置节点，我们可以使用双向链表。  
双向链表比单向链表稍微复杂一些，它的每一个节点除了拥有data和next指
针，还拥有指向前置节点的prev指针。


#### 数组和链表的区别  
链表的基本知识我懂了。数组和链表都属于线性的数据结构，用哪一个更好呢?  


从表格可以看出，数组的优势在于能够快速定位元素，对于读操作多、写操作少的场景来说，用数组更合适一些。  
相反地，链表的优势在于能够灵活地进行插入和删除操作，如果需要在尾部频繁插入、删除元素，用链表更合适一些。

如果说数组在内存中的存储方式是顺序存储，那么链表在内存中的存储方式则
是随机存储。


## 数据结构的组成方式

### 线型结构

线型结构是最简单的数据结构包括数组链表以及由它们衍生出来的栈，队列，哈希表。


### 树(非线性)
树是相对复杂的数据结构，其中比较有代表性的是二叉树，由它又衍生出了二
叉堆之类的数据结构。

### 图(非线性)

  图是更为复杂的数据结构，因为在图中会呈现出多对多的关联关系。

### 其他数据结构
除上述所列的几种基本数据结构以外，还有一些其他的千奇百怪的数据结构。
它们由基本数据结构变形而来，用于解决某些特定问题，如跳表、哈希链表、位图
等。



---------分割线
排列整齐有序的数据结构叫做数组。是有限个相同类型的变量所组成的有序集合。

  